package com.hanter.android.radlib.web;

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Build;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewDatabase;

public class WebViewHelper {

    // 缓存模式
    // 1.LOAD_CACHE_ELSE_NETWORK 优先从缓存加载，即使缓存已经过期，如果没有则会从网络加载
    // 2.LOAD_CACHE_ONLY 只从缓存加载，不使用网络
    // 3.LOAD_DEFAULT 默认的缓存使用模式
    // 4.LOAD_NORMAL = LOAD_DEFAULT
    // 5.LOAD_NO_CACHE 不使用缓存，从网络加载

    /**
     * H5 Cache目录
     **/
    private final static String WEB_CACHE_DIRECTORY = "web_cache";

    private WebView webview;

    public WebViewHelper(WebView webView) {
        this.webview = webView;
    }

    /**
     * 清除整个应用的缓存，CacheManager已经被移除，不使用
     */
    public void clearWebViewCache() {
        if (webview != null) {
            // 清除浏览器页面缓存
            webview.clearCache(true);
        }
    }

    /**
     * 清除表单数据
     *
     * @param context Context
     */
    @SuppressWarnings("deprecation")
    public static void clearWebViewFormData(Context context) {
        if (context != null) {

            WebViewDatabase webviewDatabase = WebViewDatabase.
                    getInstance(context);

            webviewDatabase.clearFormData();
            webviewDatabase.clearHttpAuthUsernamePassword();
            if (Build.VERSION.SDK_INT <= 18) {
                // 18及以后，不会保存密码
                webviewDatabase.clearUsernamePassword();
            }
        }
    }

    // API21 摒弃CookieSyncManger，用CookieManager.flush方法，这里没有做处理优化
    // 参考：http://my.oschina.net/tingzi/blog/193697
    public void clearWebViewCookies() {
        CookieSyncManager.createInstance(webview.getContext());
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.removeAllCookie();
        CookieSyncManager.getInstance().sync();
    }

    /**
     * 设置浏览器支持HTML5
     */
    @SuppressLint("SetJavaScriptEnabled")
    public void initWebView() {
        if (webview == null) {
            return;
        }

        WebSettings settings = webview.getSettings();

        // String appCacheDir = webview.getContext().getCacheDir().getAbsolutePath()
        // + File.separator + APP_CACHE_DIRECTORY;

        String appCacheDir = webview.getContext().
                getDir(WEB_CACHE_DIRECTORY, Context.MODE_PRIVATE).getAbsolutePath();

        // 允许访问本地网页文件
        settings.setAllowFileAccess(true);

        // API11及以上允许从ContentProvider中加载网页
        settings.setAllowContentAccess(true);


        // 设置页面缓存模式
        settings.setCacheMode(WebSettings.LOAD_DEFAULT);
        // 开启H5缓存API
        settings.setAppCachePath(appCacheDir);
        settings.setAppCacheEnabled(true);
        // DOM存储API
        settings.setDomStorageEnabled(true);
        // 数据库存储API
        settings.setDatabaseEnabled(true);
        // 保存表单
        settings.setSaveFormData(true);
        // 不保存密码
        if (Build.VERSION.SDK_INT <= 18) {
            settings.setSavePassword(false);
        }
        // 使用JS
        settings.setJavaScriptEnabled(true);
        // JS能打开新窗口
        settings.setJavaScriptCanOpenWindowsAutomatically(true);

        // API18及以后不支持插件，不考虑使用，默认OFF
        // settings.setPluginState
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        }
    }
    
    public void onResume() {

    }

    public void onPause() {

    }

    public void onDestroy() {
        // 移除JS对象
        webview.removeAllViews();
        webview.destroy();
    }
}
